package 七大排序;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;

public class SortTest {
    private static final ThreadLocalRandom random = ThreadLocalRandom.current();

    /**
     * 产生随机数组的方法
     * @param N
     * @return
     */
    public static int[] createRandomArr(int N){
        int[] arr = new int[N];
        for (int i = 0; i < N; i++) {
            arr[i] = random.nextInt(1,Integer.MAX_VALUE);
        }
        return arr;
    }

    /**
     * 复制数组的方法
     * @param arr
     * @return
     */
    public static int[] copyArr(int[] arr){
        return Arrays.copyOf(arr,arr.length);
    }

    /**
     * 在给定数组上测试给定名称的方法的性能
     * @param arr
     * @param mt
     * @throws ClassNotFoundException
     */
    public static void randomArrTest(int[] arr, String mt) throws ClassNotFoundException {
        try{
            Class<SevenSort> clazz = SevenSort.class;
            Method method = clazz.getDeclaredMethod(mt,int[].class);
            long start = System.currentTimeMillis();
            method.invoke(new SevenSort(),arr);
            long end = System.currentTimeMillis();
            if (isSort(arr)){
                System.out.println(mt+"排序完成用时："+(end - start) + "ms");
            }else {
                System.out.println("数组无序，排序方法有误");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 测试数组是否按照非降序排列
     * @param arr
     * @return
     */
    public static boolean isSort(int[] arr){
        for (int i = 0; i < arr.length - 2; i++) {
            if (arr[i] > arr[i + 1]){
                return false;
            }
        }
        return true;
    }

}
